/**
 * 题目：有序矩阵中第k小的元素
给你一个 n x n 矩阵 matrix ，其中每行和每列元素均按升序排序，找到矩阵中第 k 小的元素。
请注意，它是 排序后 的第 k 小元素，而不是第 k 个 不同 的元素。

你必须找到一个内存复杂度优于 O(n2) 的解决方案。
https://leetcode.cn/problems/kth-smallest-element-in-a-sorted-matrix/
 */
public class KthSmallest {
    public int kthSmallest(int[][] matrix, int k) {
        //要找第k小的元素，那就构造容量为k的大根堆
        PriorityQueue<Integer> heap = new PriorityQueue<> (new IntCmp());

        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[0].length; j++) {
                if (heap.size() < k) {
                    heap.offer(matrix[i][j]);
                } else {
                    if (matrix[i][j] < heap.peek()) {
                        heap.poll();
                        heap.offer(matrix[i][j]);
                    }
                }
            }
        }

        return heap.peek();
    }
}